// 函数类型

// 返回值类型
function add(a:number,b:number):number{
  return a + b
}

let res:number
res = add(3,4)

// 箭头函数同理

let add2 = (a:number,b:number):number=> 123
let add3 = (a:number,b:number):number=> { return 789}

// 整体注解

type AddFn = (a:number,b:number) => number
const add4: AddFn = (c,d)=>{ return c-d }

// 可选参数 ?
function getName(firstName:string , lastName?:string):string{
  if(lastName){
    // 存在 lastName参数
    return `${firstName} ${lastName}`
  }else{
    return firstName
  }
}

console.log(getName('ben','json'));
console.log(getName('ben'));


// 没有返回值 void

function eachArr(arr:number[]):void{
  for(let i = 0;i<arr.length;i++){
    console.log(arr[i]); 
  }
}

eachArr([1,2,3,4,5])

console.log('-=-=-=-=',eachArr([1,2,3,4,5]));


// 练习

// 将创建一个函数, 功能: 讲数组转换为字符串
// 其中 数组既可以是包含字符串又可以包含数字,分隔符也可以自定义
// 类型为字符串类型 :void
// arrStr([1,2,3])   ---> '1-2-3'
// arrStr(['666','777'],'★')  ---> '666★777'


// 练习
// fn([1,''],?)

// function arr2str(arr:(number | string)[] , split?:string):void{
//   // return arr.join(split)
//   if(!split) split = '-'
//   console.log(arr.join(split));
// }

// const arr2str = (arr:Array<number | string> , split?:string):string=>{
//   if(!split) split = '-'
//   return arr.join(split)
// }


type a2s = (arr:Array<number | string> , split?:string)=>string

const arr2str:a2s = (arr,split)=>{
  if(!split) split = '-'
  return arr.join(split)
}

console.log(arr2str([4,6,7]));
console.log(arr2str([4,6,7], '★'));
